/*
* Copyright (c) 2019.03，南京华乘电气科技有限公司
* All rights reserved.
*
* crcutil.h
*
* 初始版本：1.0
* 作者：张浪
* 创建日期：2019年03月29日
* 修改日期：2019年03月29日
* 修改人：张浪
* 摘要：封装了校验或生成CRC工具类
* 当前版本：1.0
*/

#ifndef CRC_UTIL_H
#define CRC_UTIL_H

#include <QByteArray>

namespace DataSpecificationGW
{
class CRCUtil
{
public:
    /*******************************************
     * 功能：构造函数
     * *****************************************/
    explicit CRCUtil();

    /*******************************************
     * 功能：析构函数
     * *****************************************/
    ~CRCUtil();

    /*******************************外部调用静态接口函数*******************************/

    /*******************************************
     * 功能：计算CRC16
     * 输入参数：
     *      qbaData：待计算数据的集合
     * 返回值：
     *      CRC16结果
     * *****************************************/
    static quint16 getCRC16(const QByteArray &qbaData);

    /*******************************************
     * 功能：计算CRC16
     * 输入参数：
     *      pData：待计算数据缓存的起始地址
     *      usCount：待计算数据缓存的长度
     * 返回值：
     *      CRC16结果
     * *****************************************/
    static unsigned short getCRC16(const char *pData, unsigned short usCount);

    /*******************************************
     * 功能：计算CRC32
     * 输入参数：
     *      qbaData：待计算数据的集合
     * 返回值：
     *      CRC32结果
     * *****************************************/
    static quint32 getCRC32(const QByteArray &qbaData);

    /*******************************************
     * 功能：计算CRC23
     * 输入参数：
     *      pData：待计算数据缓存的起始地址
     *      iCount：待计算数据缓存的长度
     * 返回值：
     *      CRC32结果
     * *****************************************/
    static unsigned int getCRC32(const char *pData, int iCount);

};

}
#endif // CRC_UTIL_H
